home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 23 / AACD 23.iso / AACD / Programming / tek / task / setsignal.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-05-12  |  766 b   |  39 lines

  1.  
  2. #include "tek/exec.h"
  3. #include "tek/kn/exec.h"
  4.  
  5. /* 
  6. **    TEKlib
  7. **    (C) 2001 TEK neoscientists
  8. **    all rights reserved.
  9. **
  10. **    TUINT TSetSignal(TAPTR t, TUINT newsignals, TUINT sigmask)
  11. **
  12. **    set/get a task's signal state.
  13. **
  14. **    an event is thrown if there are newsignals covered
  15. **    by sigmask that are not already present in the task's
  16. **    signal state.
  17. **
  18. */
  19.  
  20. TUINT TSetSignal(TAPTR task, TUINT newsignals, TUINT sigmask)
  21. {
  22.     TUINT oldsignals = 0;
  23.  
  24.     kn_lock(&((TTASK *) task)->siglock);
  25.     
  26.     oldsignals = ((TTASK *) task)->sigstate;
  27.     ((TTASK *) task)->sigstate &= ~sigmask;
  28.     ((TTASK *) task)->sigstate |= newsignals;
  29.  
  30.     if (newsignals & sigmask & oldsignals)
  31.     {
  32.         kn_doevent(&((TTASK *) task)->sigevent);
  33.     }
  34.  
  35.     kn_unlock(&((TTASK *) task)->siglock);
  36.     
  37.     return oldsignals;
  38. }
  39.